Since soon after the advent of computer networks, it has been common to operate remote computers (e.g., server class computers) from conveniently local computers (e.g., workstation or desktop class computers). As computer user interfaces (UIs) progressed from text-based user interfaces to increasingly sophisticated graphical user interfaces (GUIs), there has naturally been a desire to operate remote computers using a graphical user interface and, if possible, a graphical user interface as close as possible to that which would be presented by the computer if the user were local. However, the increase in complexity associated with graphical user interfaces has brought with it several challenges.
The simplest remote display clients send local user input (e.g., mouse and keyboard input) to the remote computer and receive display bitmap updates from the remote computer. While this can produce adequate results for some applications in higher bandwidth networks, it becomes less satisfactory as application variety increases (particularly to include high-end applications) and as available bandwidth drops to more common levels. Going beyond this simple client commonly requires some partition of application functionality and relocation of some server-side functionality to the client. However, this requires that an entire spectrum of distributed application issues be addressed.
Application functionality partitioning is a challenge in itself, typically done on a case by case basis by the application designers. The usual complications of a multi-vendor environment are exacerbated by the common circumstance that the remote display client is implemented by an independent vendor and that even the remote operating system may be considered an application in this context. With the added problem of differing versions of distributed components in the installed base, it can be a challenge maintaining correct functionality, let alone a cohesive remote graphical user interface experience.
A desirable remote display infrastructure is, then, extensible in the context of a competitive multi-vendor environment, and provides support for solutions to distributed application issues without unduly constraining the solution space. In particular, this includes appropriate encapsulation of inter-vendor functionality and data spaces, with an ability to expose functionality at arbitrary granularity if possible. It is further desirable that established functionality (e.g., communication infrastructure) be reusable to the extent possible, and that distributed component version differences and conflicts be handled gracefully. Previous remote display infrastructures fail to effectively achieve one or more of these desirable characteristics and/or make awkward choices where trade offs are required.